Введние

Дневниковые записи представляют собой интересный текстовый материал для сентимент анализа и тематического моделирования. В качестве датасета мной были выбраны дневники Вирджинии Вулф за период с 1918 по 1941 год (в переводе на русский язык). Подготовка данных включала загрузку текста дневников в формате txt, деление сплошного текста на отдельные файлы по годам написания и лемматизацию с использованием Mystem (для сентимент анализа), а также деление по году и дню недели написания (для тематического моделирования).

Основной целью проекта ставится оценка возможности применения словарных методов сентимент анализа и структурного тематического моделирования к материалу личных дневников. Проведя анализ текстов с применением данных методов, выясним, коррелируют ли полученные результаты с нашим знанием о материале как читателей.

Сентимент анализ. Словарный подход

Загружаем и исследуем данные

Посмотрим общую статистику по объему текстов

## Corpus consisting of 21 documents, showing 21 documents:
## 
##             Text Types Tokens Sentences
##  woolf_lemm_1918  2102   8086        35
##  woolf_lemm_1920   959   2824        17
##  woolf_lemm_1921  1363   4809        20
##  woolf_lemm_1922  1358   5102        36
##  woolf_lemm_1923  1544   6132        35
##  woolf_lemm_1925  1521   5524        30
##  woolf_lemm_1926  1765   7433        43
##  woolf_lemm_1927  1827   7157        18
##  woolf_lemm_1928  2523  11700        65
##  woolf_lemm_1930  1329   4706        19
##  woolf_lemm_1931  1254   4460        19
##  woolf_lemm_1932  1505   5418        33
##  woolf_lemm_1933  2088   8644        53
##  woolf_lemm_1934  1900   7852        44
##  woolf_lemm_1935  2290   9914        74
##  woolf_lemm_1936  1163   4467        20
##  woolf_lemm_1937  1379   5075        28
##  woolf_lemm_1938  2211   8843        73
##  woolf_lemm_1939  1474   4837        33
##  woolf_lemm_1940  3155  15128       120
##  woolf_lemm_1941   649   1511         9

Токенизируем, выполним предобработку, создадим объект dfm

## Document-feature matrix of: 21 documents, 10,454 features (85.29% sparse) and 0 docvars.
##                  features
## docs              понедельник август решать дожидаться покупка новый тетрадь
##   woolf_lemm_1918           5      4      1          1       1     4       4
##   woolf_lemm_1920           2      1      1          0       0     4       0
##   woolf_lemm_1921           5      4      3          0       0     1       0
##                  features
## docs              записывать старый свой
##   woolf_lemm_1918          5     10   28
##   woolf_lemm_1920          0      2    4
##   woolf_lemm_1921          4      6   13
## [ reached max_ndoc ... 18 more documents, reached max_nfeat ... 10,444 more features ]

Визуализируем самые частотные слова:

Среди самых частотных видим слова “книга”, “читать”, “думать”, “мысль”, “написать”, “слово”, что ярко отражает род деятельности автора дневников.

Загрузим словарь rusentilex_2017

Получим объект типа “quanteda dictionary”

## Dictionary object with 2 key entries.
## - [positive]:
##   - авторитет, авторитетность, авторитетный, адаптационный, адаптация, адаптивность, адаптивный, адаптироваться, адекватность, адекватный, аккуратист, аккуратистка, аккуратность, аккуратный, активность, активный, актуальность, актуальный, ангел, ангельский [ ... and 3,422 more ]
## - [negative]:
##   - аборт, абортивный, абракадабра, абсурд, абсурдность, абсурдный, авантюра, авантюризм, авантюрист, авантюристический, авантюристка, авантюристский, авантюрный, аварийность, аварийный, авария, авиакатастрофа, авиакрушение, авианалет, авиаудар [ ... and 9,452 more ]

Подсчитаем долю положительных и негативных слов, встретившихся в текстах

## Document-feature matrix of: 21 documents, 2 features (0.00% sparse) and 0 docvars.
##                  features
## docs               positive  negative
##   woolf_lemm_1918 0.5748031 0.4251969
##   woolf_lemm_1920 0.5169082 0.4830918
##   woolf_lemm_1921 0.5029412 0.4970588
##   woolf_lemm_1922 0.5954416 0.4045584
##   woolf_lemm_1923 0.5612536 0.4387464
##   woolf_lemm_1925 0.5000000 0.5000000
##   woolf_lemm_1926 0.5492958 0.4507042
##   woolf_lemm_1927 0.5126437 0.4873563
##   woolf_lemm_1928 0.5000000 0.5000000
##   woolf_lemm_1930 0.4596491 0.5403509
##   woolf_lemm_1931 0.5473251 0.4526749
##   woolf_lemm_1932 0.4227405 0.5772595
##   woolf_lemm_1933 0.4827586 0.5172414
##   woolf_lemm_1934 0.5053079 0.4946921
##   woolf_lemm_1935 0.5034722 0.4965278
##   woolf_lemm_1936 0.4557377 0.5442623
##   woolf_lemm_1937 0.5245902 0.4754098
##   woolf_lemm_1938 0.4896194 0.5103806
##   woolf_lemm_1939 0.3876221 0.6123779
##   woolf_lemm_1940 0.4514107 0.5485893
##   woolf_lemm_1941 0.4423077 0.5576923

Построим график

На графике видим, что записи 1922 года выделяются как наиболее позитивные, что прослеживается и при чтении текста: в 1922 Вирджиния Вулф с воодушевлением пишет о выходе нового романа “Комната Джейкоба”, о своем философском взгляде на критику, которая более ее не тревожит, о (несвойственном ей) приподнятом состоянии духа.

Тон записей последних лет жизни писательницы скорее негативный: она часто упоминает военные события, говорит об упадке сил, о тяжести писательского труда и своей усталости от него.

Переведем результаты в шкалу (-1, +1) и построим график

“Скачки” показателей сентимента коррелируют с историей жизни писательницы, которая страдала от ментальных расстройств и чье настроение и взгляды на жизненные события менялись от воодушевления до полного упадка, что отражалось и в ее дневнике.

Посмотрим, какие слова внесли вклад в подсчет положительного и негативного сентимента

Найденные в текстах положительные слова

Найденные в текстах негативные слова

Можно заметить, что в топ списков попали некоторые слова, значения которых сильно зависят от контекста и их нельзя одозначно отнести к позитивными или негативным. Например, это слова “старый”, “великий”, “воскресение” и ряд других.

Посмотрим на их контексты, чтобы оценить, насколько отнесение этих слов к положительным или отрицательным релевантно для исследуемых данных. Проверены контексты для слов “старый”, “великий”, “воскресение”, “внешний”, “понимать”, “зеленый”, “легкий”, “вчерашний”. Выведем только некоторые примеры контекстов.

“Старый”

“Великий”

“Воскресение”

“Понимать”

“Зеленый”

Модифицирум словарь

Изменим словари, убрав некоторые слова, контексты которых не совпадают с меткой, но встречаются часто и вносят значительный вклад в сентимент, чтобы повысить точность анализа.

Выполним анализ по тому же алгоритму, но с отредактированным словарем.

В целом, изменения в результатах получились незначительные. Посмотрим на числовые значения:

Анализ с базовым словарем

## Document-feature matrix of: 21 documents, 2 features (0.00% sparse) and 0 docvars.
##                  features
## docs               positive  negative
##   woolf_lemm_1918 0.5748031 0.4251969
##   woolf_lemm_1920 0.5169082 0.4830918
##   woolf_lemm_1921 0.5029412 0.4970588
##   woolf_lemm_1922 0.5954416 0.4045584
##   woolf_lemm_1923 0.5612536 0.4387464
##   woolf_lemm_1925 0.5000000 0.5000000
##   woolf_lemm_1926 0.5492958 0.4507042
##   woolf_lemm_1927 0.5126437 0.4873563
##   woolf_lemm_1928 0.5000000 0.5000000
##   woolf_lemm_1930 0.4596491 0.5403509
##   woolf_lemm_1931 0.5473251 0.4526749
##   woolf_lemm_1932 0.4227405 0.5772595
##   woolf_lemm_1933 0.4827586 0.5172414
##   woolf_lemm_1934 0.5053079 0.4946921
##   woolf_lemm_1935 0.5034722 0.4965278
##   woolf_lemm_1936 0.4557377 0.5442623
##   woolf_lemm_1937 0.5245902 0.4754098
##   woolf_lemm_1938 0.4896194 0.5103806
##   woolf_lemm_1939 0.3876221 0.6123779
##   woolf_lemm_1940 0.4514107 0.5485893
##   woolf_lemm_1941 0.4423077 0.5576923

Анализ с модифицированным словарем

## Document-feature matrix of: 21 documents, 2 features (0.00% sparse) and 0 docvars.
##                  features
## docs               positive  negative
##   woolf_lemm_1918 0.5847458 0.4152542
##   woolf_lemm_1920 0.5128205 0.4871795
##   woolf_lemm_1921 0.5000000 0.5000000
##   woolf_lemm_1922 0.6017964 0.3982036
##   woolf_lemm_1923 0.5644172 0.4355828
##   woolf_lemm_1925 0.5048860 0.4951140
##   woolf_lemm_1926 0.5601023 0.4398977
##   woolf_lemm_1927 0.5122549 0.4877451
##   woolf_lemm_1928 0.5045593 0.4954407
##   woolf_lemm_1930 0.4518519 0.5481481
##   woolf_lemm_1931 0.5497835 0.4502165
##   woolf_lemm_1932 0.4184615 0.5815385
##   woolf_lemm_1933 0.4886128 0.5113872
##   woolf_lemm_1934 0.4954128 0.5045872
##   woolf_lemm_1935 0.4981343 0.5018657
##   woolf_lemm_1936 0.4394464 0.5605536
##   woolf_lemm_1937 0.5138889 0.4861111
##   woolf_lemm_1938 0.4925373 0.5074627
##   woolf_lemm_1939 0.3758621 0.6241379
##   woolf_lemm_1940 0.4465692 0.5534308
##   woolf_lemm_1941 0.4090909 0.5909091

О чем писала в своих дневниках Вирджиния Вулф?

Тематическое моделирование

Загрузим нелемматизированные тексты, разделенные не только по годам, но и по дням недели. Из названий файлов извлечем год и день написания текста в качестве метаданных.

Выполним предобработку текстов: сделаем перменные year и day факторными, токенизируем и добавим к токенам коллокации.

##  [1] "1918" "1920" "1921" "1922" "1923" "1925" "1926" "1927" "1928" "1930"
## [11] "1931" "1932" "1933" "1934" "1935" "1936" "1937" "1938" "1939" "1940"
## [21] "1941"
## [1] "Воскресенье" "Вторник"     "Понедельник" "Пятница"     "Среда"      
## [6] "Суббота"     "Четверг"

Частотные коллокации:

Построим несколько моделей и выясним, какое значение K будет наиболе удачным.

##    K   exclus    semcoh   heldout residual     bound    lbound em.its
## 1  5 8.778711 -74.20997 -7.213885 1.478321 -208445.9 -208441.1    500
## 2 10  8.48618 -79.86311 -7.479336 1.396058 -203892.9 -203877.8     71
## 3 15  8.59059 -78.94662  -7.57518 1.330282 -199854.4 -199826.5    112
## 4 20 8.685426 -85.40046 -7.824354 1.335397 -196183.7 -196141.3    131

Также посмотрим coherence/exclusivity tradeoff.

Построим модели с более коротким шагом.

##    K   exclus    semcoh   heldout residual     bound    lbound em.its
## 1 10  8.48618 -79.86311 -7.479336 1.396058 -203892.9 -203877.8     71
## 2 11 8.356532 -76.49332 -7.414918 1.345695 -202748.2 -202730.7     63
## 3 12 8.504556 -75.75928 -7.652501 1.326295 -201938.9 -201918.9     49
## 4 13 8.441822 -75.04542 -7.606648 1.341931 -201016.5 -200993.9     91
## 5 14 8.430957 -74.61999 -7.582814 1.330484 -200501.6 -200476.4     45
## 6 15  8.59059 -78.94662  -7.57518 1.330282 -199854.4 -199826.5    112
## 7 16 8.533622 -79.68609 -7.668532 1.318835 -199054.9 -199024.2    103

Проведенные эксперименты с различной комбинацией аргументов (K и prevalence), которые не отражены здесь в целях экономии, показали, что наиболее удачным числом тем оказалось 14, а включение переменной day в качестве ковариаты улучшения результатов не дало.

Построим модель для K = 14

Подробнее посмотрим на слова, характеризующие топики:

## Topic 1 Top Words:
##       Highest Prob: жизни, однако, время, что-то, думаю, смерть, могла 
##       FREX: смерть, однажды, клайв, постели, великое, поднимается, полный 
##       Lift: поднимается, полный, однажды, клайв, готова, воспоминаний, пришли 
##       Score: поднимается, однажды, полный, провал, клайв, воспоминаний, литтон 
## Topic 2 Top Words:
##       Highest Prob: очень, говорит, люди, должны, который, словно, роман 
##       FREX: думает, ужасно, ними, морган, воскресенье_марта, говорит, моргана 
##       Lift: воскресенье_марта, перечитать, понравится, касается, разговаривали, отчего, ногах 
##       Score: воскресенье_марта, разговаривали, моргана, ними, читал, думает, понравится 
## Topic 3 Top Words:
##       Highest Prob: люди, очень, дом, окна, дома, ветер, дождь 
##       FREX: едем, окна, кровати, деревья, река, ветер, кругом 
##       Lift: понедельник_февраля, дороги, ярких, наверху, река, деревья, кругом 
##       Score: понедельник_февраля, едем, дороги, деревья, окна, кругом, стояли 
## Topic 4 Top Words:
##       Highest Prob: думаю, однако, миссис, никаких, должна, книги, шары 
##       FREX: лондона, шары, лесли, etc, библиотеке, никаких, гинеи 
##       Lift: приняла, лесли, библиотеке, лондона, тремя_гинеями, браться, правильное 
##       Score: приняла, лесли, библиотеке, шары, джон, лондонской, клянусь 
## Topic 5 Top Words:
##       Highest Prob: закончила, пока, года, вчера, слишком, получится, знаю 
##       FREX: закончила, получится, года, целиком, часть, июля, это_время 
##       Lift: целиком, закончила, последняя_глава, тему, получится, каждое_утро, свободно 
##       Score: целиком, закончила, года, каждое_утро, волн, последняя_глава, тему 
## Topic 6 Top Words:
##       Highest Prob: слишком, пишу, однако, очень, нужно, лишь, думаю 
##       FREX: которое, дети, слишком, пятница_февраля, чувствовать, котором, часто 
##       Lift: пятница_февраля, биографию, н.с, художественную_прозу, критикой, свои_мозги, создать 
##       Score: пятница_февраля, н.с, продолжаю, биографию, дети, веши, размышления 
## Topic 7 Top Words:
##       Highest Prob: думаю, писать, могу, время, страниц, книгу, хочу 
##       FREX: ноября, переписывать, страниц, слов, начала, волны, прочитать 
##       Lift: довела, придать, справиться, переписывать, понятия, ноября, предстоит 
##       Score: довела, справиться, придать, плохой, форме, среда_августа, возьмусь 
## Topic 8 Top Words:
##       Highest Prob: должна, писать, очень, могу, будут, буду, написать 
##       FREX: должна, мозги, будут, гранки, порядок, такую, говорю 
##       Lift: порядок, кровь, планирую, мозги, осень, тяжелая_работа, отчаяние 
##       Score: порядок, гранки, мозги, отчаяние, глава, будут, такую 
## Topic 9 Top Words:
##       Highest Prob: нравится, думаю, слишком, хочу, однако, писать, пишу 
##       FREX: нравится, таймс, эссе, пусть, миссис_вулф, роде, прозу 
##       Lift: нравится, красоту, судьба, ожидала, собственных, продали, детей 
##       Score: нравится, ожидала, роде, красоту, рецензии, миссис_вулф, судьба 
## Topic 10 Top Words:
##       Highest Prob: очень, гарди, однако, время, немного, почему, читать 
##       FREX: гарди, слегка, спросила, мужчина, глазами, романы, марри 
##       Lift: слегка, якобы, гарди, спросил, марри, мужчина, привычка 
##       Score: слегка, гарди, спросила, мужчина, искусства, молодые, глазами 
## Topic 11 Top Words:
##       Highest Prob: день, очень, вчера, могу, книга, лондон, итак 
##       FREX: лондон, ужас, роджер, причина, никакого, день, налета 
##       Lift: причина, налета, мальчик, страх, гул, делала, ужас 
##       Score: причина, налета, лондон, гул, площади, мальчик, дефо 
## Topic 12 Top Words:
##       Highest Prob: могу, голове, очень, думаю, однако, писать, день 
##       FREX: могу_писать, сцену, голове, форму, ужать, хороший, знак 
##       Lift: перепечатываю, среда_февраля, ужать, материал, сих_пор, головы, сохранить 
##       Score: среда_февраля, перепечатываю, ужать, форму, могу_писать, настоящая, выйдет 
## Topic 13 Top Words:
##       Highest Prob: могу, лишь, воскресенье, пока, книги, думаю, время 
##       FREX: воскресенье, ужасное, августа, ритм, лето, одного, людьми 
##       Lift: ужасное, ритм, странная, дочери, бесконечно, августа, написана 
##       Score: ужасное, ритм, августа, воскресенье, написана, мотыльки, сумею 
## Topic 14 Top Words:
##       Highest Prob: очень, словно, часа, пока, одну, думаю, цвета 
##       FREX: часа, цвета, короля, пустоши, четыре, обед, удивительно 
##       Lift: короля, красного, беседа, огнем, оказалось, камина, могу_представить 
##       Score: короля, цвета, оказалось, пустоши, огнем, наше, беседа

А также на распределение топиков по годам:

Обратим внимание на 1922 и 1939 годы, которые выделились по сентименту. В 1922 году преобладают темы 2 и 9. Посмотрим на представляющие их слова:

Topic 2

Topic 9

Можно предположить, что Тема 2 связана с отношением людей, прежде всего критиков, к творчеству писательницы. Тема 9 - с ее собственным отношением к писательству. В 1922 году она действительно пишет о любви к своему делу и вдохновении, что непосрдественно связано и с отзывами со стороны читателей. Заметим, что Тема 9 в 1930-е годы почти не представлена и этому периоду также соответствуют более негативные показатели сентимента.

В 1939-1941 выделяется Тема 11, ключевые слова которой позволяют предположить, что она связана с войной. Однако она также представлена и в более ранние годы, что не позволяет проинтерпретировать ее как только военную.

Topic 11

Хорошо интерпретируемой оказалась Тема 3, связанная с поедзками.

Topic 3

В Теме 5 удачно выделилсь словоформы прошедшего времени, поэтому можно связать ее с часто встречающимися в дневниках записями о завершении работы над романом или другим произведением.

Topic 5

Итоги

В дневниках писателей сохраняется много образности, они приближены к художественному тексту в силу рода деятельности автора, поэтому стоит помнить о сохраняющихся сложностях анализа: словарный подход не “улавливает” языковую игру, метафоричные конструкции, иронию (коей в записях Вирджинии Вулф не мало). Однако стоит упомянуть, что ранее на этом же материале мы проводили сентимент анализ с использованием модели bert_rus_sentiment и ручная оценка показала, что словарный подход дал более точный результат.